package in.rob.client.dialog; import in.lib.Constants; import in.lib.annotation.InjectView; import in.lib.annotation.OnClick; import in.lib.manager.SettingsManager; import in.lib.utils.Views; import in.rob.client.R; import in.rob.client.base.RobinDialogActivity; import lombok.Getter; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.Window; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.LinearLayout; import android.widget.ProgressBar; public class WebLightboxDialog extends RobinDialogActivity implements OnClickListener { private final String READABILITY_PREFIX = "http://www.instapaper.com/text?u="; private final String READABILITY_REGEX = "http(s?)://(www.)?instapaper.com"; @Getter private Context context = this; private String mUrl; @Getter @InjectView(R.id.fullscreen_web) public WebView webView; @OnClick @InjectView(R.id.icon_web) public View mWeb; @OnClick @InjectView(R.id.icon_share) public View mShare; @OnClick @InjectView(R.id.icon_close) public View mClose; @OnClick @InjectView(R.id.icon_back) public View mBack; @OnClick @InjectView(R.id.icon_forward) public View mForward; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.web_lightbox); Views.inject(this); getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); getWindow().setGravity(Gravity.CENTER); getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.fullscreen_dialog_bg)); if (getIntent().getExtras() != null && getIntent().getExtras().containsKey(Constants.EXTRA_PREVIEW_URL)) { mUrl = getIntent().getExtras().getString(Constants.EXTRA_PREVIEW_URL); } else { finish(); return; } WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setBuiltInZoomControls(true); settings.setLoadWithOverviewMode(true); settings.setUseWideViewPort(true); if (Build.VERSION.SDK_INT >= 11) { settings.setDisplayZoomControls(false); } final ProgressBar progressBar = (ProgressBar)findViewById(R.id.progress); webView.setWebViewClient(new CustomWebViewClient()); webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int progress) { if (progress < 100) { setLoadProgress(progress); } else if (progress == 100) { setLoadProgress(100); } super.onProgressChanged(view, progress); } }); if (savedInstanceState == null) { if (SettingsManager.isWebReadabilityEnabled() && !mUrl.matches(READABILITY_REGEX)) { mUrl = READABILITY_PREFIX + Uri.encode(mUrl); } webView.loadUrl(mUrl); } } private class CustomWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (SettingsManager.isWebReadabilityEnabled() && !url.matches(READABILITY_REGEX)) { view.loadUrl(READABILITY_PREFIX + Uri.encode(url)); return true; } return false; } } private void removeWebView() { if (webView != null) { webView.stopLoading(); webView.loadData("", "text/html", "utf-8"); } } @Override public void finish() { super.finish(); removeWebView(); } @Override protected void onDestroy() { removeWebView(); super.onDestroy(); if (webView != null) { ((ViewGroup)findViewById(R.id.web_holder)).removeAllViews(); webView.destroy(); webView = null; } } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } @Override public void onSaveInstanceState(Bundle savedInstanceState) { webView.saveState(savedInstanceState); super.onSaveInstanceState(savedInstanceState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); webView.restoreState(savedInstanceState); } public void setLoadProgress(int progress) { View view1 = ((ViewGroup)findViewById(R.id.progress_indicator)).getChildAt(0); View view2 = ((ViewGroup)findViewById(R.id.progress_indicator)).getChildAt(1); LinearLayout.LayoutParams lp1 = (android.widget.LinearLayout.LayoutParams)view1.getLayoutParams(); lp1.weight = 100 - progress; LinearLayout.LayoutParams lp2 = (android.widget.LinearLayout.LayoutParams)view2.getLayoutParams(); lp2.weight = progress; view1.setLayoutParams(lp1); view2.setLayoutParams(lp2); } @Override public void onBackPressed() { if (webView.canGoBack()) { webView.goBack(); return; } removeWebView(); super.onBackPressed(); } @Override public void onClick(View v) { if (v == mWeb) { Intent web = new Intent(Intent.ACTION_VIEW); if (webView.getUrl() == null) { web.setData(Uri.parse(mUrl)); } else { web.setData(Uri.parse(webView.getUrl())); } startActivity(web); } else if (v == mShare) { Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_TEXT, mUrl); shareIntent.setType("text/plain"); startActivity(Intent.createChooser(shareIntent, getString(R.string.share_via))); } else if (v == mBack) { if (webView.canGoBack()) { webView.goBack(); } } else if (v == mForward) { webView.goForward(); } else if (v == mClose) { finish(); } } }